home *** CD-ROM | disk | FTP | other *** search
/ DOpus Plus / DOpus Plus.iso / Enhancements / FTPBatch / ARexx / FTPBatchLister.dopus5 < prev   
Text File  |  1998-10-25  |  14KB  |  426 lines

  1. /* $VER: FTPBatchLister.dopus 4.1 (25.10.98) (C) by Martin Steigerwald
  2. */
  3.  
  4. OPTIONS RESULTS
  5. IF ~SHOW('L','rexxsupport.library') THEN CALL ADDLIB('rexxsupport.library',0,-30,0)
  6. IF ~SHOW('L','rexxsupport.library') THEN EXIT
  7.  
  8. PARSE ARG opus ' ' handle ' ' config.fileprefix ' ' config.download
  9. batchlistfile = config.fileprefix'.batch'
  10. config.file = config.fileprefix'.config'
  11.  
  12. ADDRESS VALUE opus
  13.  
  14. appname='FTPBatchLister'
  15. FORBID()
  16. portname=appname'.0'
  17. DO i = 0 WHILE SHOW('P', portname)
  18.     portname='FTPBatchLister.' || i
  19. END
  20. IF ~OPENPORT(portname) THEN DO
  21.     PERMIT()
  22.     DOPUS REQUEST '"'appname': Couldnt open port" OK'
  23. END
  24. PERMIT()
  25.  
  26. entrymenu.0 = "Edit Name"
  27. entrymenu.1 = "Edit Site"
  28. entrymenu.2 = "---"
  29. entrymenu.3 = "Delete"
  30. entrymenu.count = 4
  31.  
  32. LoadConfig()
  33.  
  34. /* --- DEBUG ---
  35.    debugging=1 --> FTPBatchDownload will be started with C:Run
  36.    to provide debugging output
  37. */
  38. config.debugging=0
  39.  
  40. OpenLister()
  41.  
  42. LoadBatchlist()
  43.  
  44. /* autobatch mode */
  45.  
  46. IF config.download=='DOWNLOAD' THEN DO
  47.     config.logging=1
  48.     config.requesters=0
  49.     StartDownload(handle 'ALL AUTODOWNLOAD')
  50. END
  51.  
  52. /* interactive mode */
  53.  
  54. DO FOREVER
  55.     IF WAITPKT(portname) THEN DO
  56.         packet = GETPKT(portname)
  57.         IF packet ~== '00000000'x THEN DO
  58.             event = UPPER(GETARG(packet,0))
  59.             SELECT
  60.                 WHEN event = 'INACTIVE' THEN LEAVE
  61.                 WHEN event = 'FTPBATCHCONFIG' THEN DO
  62.                     cmdargs=STRIP(GETARG(packet,5))
  63.                     IF cmdargs=='EDIT' THEN EditConfig()
  64.                     IF cmdargs=='LOAD' THEN LoadConfig()
  65.                     IF cmdargs=='SAVE' THEN SaveConfig()
  66.                     IF cmdargs=='EDITSAVE' THEN DO
  67.                         IF EditConfig()=1 THEN SaveConfig()
  68.                     END
  69.                 END
  70.                 WHEN event = 'FTPBATCHLIST' THEN DO
  71.                     cmdargs=STRIP(GETARG(packet,5))
  72.                     IF cmdargs='SAVE' THEN SaveBatchlist()
  73.                     IF cmdargs='LOAD' THEN LoadBatchlist()
  74.                 END
  75.                 WHEN event = 'FTPBATCHEDITENTRY' THEN DO
  76.                     cmdargs=STRIP(GETARG(packet,5))
  77.                     EditEntries(handle cmdargs)
  78.                 END
  79.                 WHEN event = 'DOUBLECLICK' THEN DO
  80.                     cmdargs=STRIP(GETARG(packet,2))
  81.                     EditEntry(handle 'name' '"'cmdargs'"')
  82.                 END
  83.                 WHEN event = 'DROP' THEN DO
  84.                     sourcehandle = GETARG(packet,3)
  85.                     filenames = GETARG(packet,2)
  86.                     LISTER QUERY sourcehandle TITLE
  87.                     sourcetitle=RESULT
  88.                     IF LEFT(sourcetitle,4)~=='FTP:' THEN DO
  89.                         LISTER REQUEST handle '"No FTP lister" OK'
  90.                     END
  91.                     ELSE DO
  92.                         LISTER QUERY sourcehandle PATH
  93.                         pathname=RESULT
  94.                         AddEntries()
  95.                     END /* IF */
  96.                 END /* WHEN */
  97.                 WHEN event = 'DELETE' THEN DO
  98.                     filenames = GETARG(packet,2)
  99.                     DeleteEntries()
  100.                 END /* WHEN */
  101.                 WHEN event = 'PATH' THEN DO
  102.                     config.fileprefix=GETARG(packet,2)
  103.                     batchlistfile = config.fileprefix'.batch'
  104.                     config.file = config.fileprefix'.config'
  105.                     LoadBatchlist()
  106.                     LoadConfig()
  107.                 END /* WHEN */
  108.                 WHEN event = 'FTPBATCHDOWNLOAD' THEN DO
  109.                     cmdargs=STRIP(GETARG(packet,5))
  110.                     StartDownload(handle cmdargs)
  111.                 END /* WHEN */
  112.                 WHEN event = 'MENU' THEN DO
  113.                     IF GETARG(packet,4)=='file' THEN DO
  114.                         menuitem=GETARG(packet,3)
  115.                         menuarg=GETARG(packet,2)
  116.                         SELECT
  117.                             WHEN menuitem=0 THEN DO
  118.                                 EditEntry(handle 'name "'menuarg'"')
  119.                             END
  120.                             WHEN menuitem=1 THEN DO
  121.                                 EditEntry(handle 'comment "'menuarg'"')
  122.                             END
  123.                             WHEN menuitem=3 THEN DO
  124.                                 filenames = '"'menuarg'"'
  125.                                 DeleteEntries()
  126.                             END /* WHEN */
  127.                             OTHERWISE DOPUS REQUEST '"Unknown menu entry »' || menuitem || '«!" OK'
  128.                         END /* SELECT */
  129.                     END /* IF */
  130.                 END /* WHEN */
  131.                 WHEN event = 'EDIT' THEN DO
  132.                     entryname=GETARG(packet,2)
  133.                     new=GETARG(packet,4)
  134.                     field=GETARG(packet,3)
  135.                     SetEntry(handle field '"'entryname'" "'new'"')
  136.                 END /* WHEN */
  137.                 OTHERWISE DOPUS REQUEST '"Unknown event type »' || event || '«!" OK'
  138.             END /* SELECT */
  139.             CALL REPLY(packet,0)
  140.         END /* IF */
  141.     END /* IF */
  142. END /* DO */
  143.  
  144. Cleanup()
  145.  
  146. EXIT
  147.  
  148. Cleanup:
  149.     DOPUS REMTRAP '*' portname
  150.  
  151.     DOPUS COMMAND "FTPBatchDownload" REMOVE
  152.     DOPUS COMMAND "FTPBatchConfig" REMOVE
  153.     DOPUS COMMAND "FTPBatchList" REMOVE
  154.     DOPUS COMMAND "FTPBatchEditEntry" REMOVE
  155.  
  156.     CLOSEPORT(portname)
  157. RETURN 1
  158.  
  159. EditConfig: PROCEDURE EXPOSE config.
  160.     res=0
  161.     DOPUS REQUEST '"How many simultaneous connections do you want?" 1|2|3|4|5|6|7|8|Cancel'
  162.     IF RC>0 THEN DO
  163.         editconfig.maxconnections=RC
  164.         DOPUS REQUEST '"How should FTPBatch behave?" Requesters|Both|Logging|Cancel'
  165.         IF RC>0 THEN DO
  166.             IF RC<3 THEN DO
  167.                 editconfig.requesters=1
  168.             END
  169.             ELSE DO
  170.                 editconfig.requesters=0
  171.             END
  172.             IF RC>1 THEN DO
  173.                 editconfig.logging=1
  174.             END
  175.             ELSE DO
  176.                 editconfig.logging=0
  177.             END
  178.             DOPUS GETSTRING '"Please enter the default download path." 200 "'config.downloadpath'" OK|Cancel'
  179.             IF RESULT~=='RESULT' THEN DO
  180.                 config.downloadpath=RESULT
  181.                 config.maxconnections=editconfig.maxconnections
  182.                 config.requesters=editconfig.requesters
  183.                 config.logging=editconfig.logging
  184.                 res=1
  185.             END
  186.         END
  187.     END
  188. RETURN res
  189.  
  190. SaveConfig: PROCEDURE EXPOSE config.
  191.     IF OPEN('fh', config.file, 'W') THEN DO
  192.         WRITELN('fh','FTPBatchConfig')
  193.         WRITELN('fh','MaxConnections =' config.maxconnections)
  194.         WRITELN('fh','DownloadPath =' config.downloadpath)
  195.         WRITELN('fh','Requesters =' config.requesters)
  196.         WRITELN('fh','Logging =' config.logging)
  197.         CLOSE('fh')
  198.     END
  199.     ELSE DO
  200.         DOPUS REQUEST '"Couldnt save config file!" Cancel'
  201.     END
  202. RETURN 0
  203.  
  204. LoadConfig: PROCEDURE EXPOSE config.
  205.     config.maxconnections=1
  206.     config.downloadpath='RAM:'
  207.     config.requesters=1
  208.     config.logging=0
  209.     IF OPEN('fh', config.file, 'R') THEN DO
  210.         line=READLN('fh')
  211.         IF UPPER(line)=='FTPBATCHCONFIG' THEN DO
  212.             DO UNTIL EOF('fh')
  213.                 line=STRIP(READLN('fh'))
  214.                 PARSE VAR line option '=' setting
  215.                 option=UPPER(STRIP(option))
  216.                 setting=STRIP(setting)
  217.                 config.option=setting
  218.             END
  219.         END
  220.         ELSE DO
  221.             DOPUS REQUEST '"File »'config.file'« is no FTPBatch config file!" Cancel'
  222.         END
  223.         CLOSE('fh')
  224.     END
  225. RETURN 0
  226.  
  227. EditEntries: PROCEDURE
  228.     PARSE ARG handle ' ' field
  229.     LISTER SET handle BUSY OFF
  230.     LISTER QUERY handle SELFILES STEM selectedfiles.
  231.     IF selectedfiles.count>0 THEN DO
  232.         DO i=1 TO selectedfiles.count
  233.             j=i-1
  234.             IF EditEntry(handle field '"'selectedfiles.j'"')=0 THEN LEAVE
  235.         END
  236.     END
  237.     LISTER SET HANDLE BUSY OFF
  238. RETURN 0
  239.  
  240. EditEntry: PROCEDURE EXPOSE entrymenu.
  241.     PARSE ARG handle ' ' field ' "'entryname'"'
  242.     LISTER SET handle BUSY ON
  243.     LISTER QUERY handle ENTRY '"'entryname'"' STEM editentry.
  244.     editentry.menu=entrymenu.
  245.     changed=0
  246.     IF UPPER(field)=='NAME' THEN DO
  247.         LISTER GETSTRING handle '"New name:" 108 "'editentry.name'" OK|Cancel|Cancel all'
  248.         IF (DOPUSRC=1 | DOPUSRC=-1) & editentry.name~=RESULT THEN DO
  249.             editentry.name=RESULT
  250.             changed=1
  251.         END
  252.     END
  253.     ELSE DO
  254.         LISTER GETSTRING handle '"New URL:" 255 "'editentry.comment'" OK|Cancel|Cancel all'
  255.         IF (DOPUSRC=1 | DOPUSRC=-1) & editentry.comment~=RESULT THEN DO
  256.             editentry.comment=RESULT
  257.             changed=1
  258.         END
  259.     END
  260.     IF changed=1 THEN DO
  261.         LISTER REMOVE handle '"'entryname'"'
  262.         LISTER ADDSTEM handle editentry.
  263.         LISTER REFRESH handle
  264.     END
  265.     LISTER SET handle BUSY OFF
  266. RETURN DOPUSRC
  267.  
  268. SetEntry: PROCEDURE
  269.     PARSE ARG handle ' ' field ' "'entryname'"' '"'new'"'
  270.     LISTER QUERY handle ENTRY '"'entryname'"' STEM editentry.
  271.     LISTER REMOVE handle '"'entryname'"'
  272.     IF field=='name' THEN editentry.name=new
  273.     IF field=='comment' THEN editentry.comment=new
  274.     LISTER ADDSTEM handle editentry.
  275.     LISTER REFRESH handle
  276. RETURN 0
  277.  
  278. OpenLister:
  279.     IF handle=0 THEN DO
  280.         LISTER NEW TOOLBAR 'FTPBatchToolbar' MODE name
  281.         handle = RESULT
  282.         IF handle=0 THEN DO
  283.             DOPUS REQUEST '"'appname': Couldnt open lister" OK'
  284.             EXIT
  285.         END
  286.         LISTER WAIT handle QUICK
  287.     END
  288.     ELSE DO
  289.         DOPUS REQUEST '"'appname': Not working right now!" OK'
  290.         EXIT
  291.     END /* IF */
  292.  
  293.     LISTER SET handle FIELD 4 'FTPSite'
  294.     LISTER SET handle DISPLAY name comment
  295.     LISTER SET handle TITLE portname
  296.     LISTER SET handle PATH config.fileprefix
  297.  
  298.     LISTER SET handle HANDLER portname QUOTES EDITING
  299.  
  300.     DOPUS COMMAND "FTPBatchDownload" TEMP PRIVATE HANDLER
  301.     DOPUS COMMAND "FTPBatchConfig" TEMP PRIVATE HANDLER
  302.     DOPUS COMMAND "FTPBatchList" TEMP PRIVATE HANDLER
  303.     DOPUS COMMAND "FTPBatchEditEntry" TEMP PRIVATE HANDLER
  304.  
  305.     DOPUS ADDTRAP FTPBatchDownload portname
  306.     DOPUS ADDTRAP FTPBatchConfig portname
  307.     DOPUS ADDTRAP FTPBatchList portname
  308.     DOPUS ADDTRAP FTPBatchEditEntry portname
  309.     DOPUS ADDTRAP Rename portname
  310.     DOPUS ADDTRAP Delete portname
  311.     DOPUS ADDTRAP Copy portname
  312.     DOPUS ADDTRAP Move portname
  313.     DOPUS ADDTRAP FTPCopy portname
  314.  
  315.  
  316.     LISTER REFRESH handle FULL
  317.     LISTER SET handle BUSY OFF
  318. RETURN 0
  319.  
  320. StartDownload: PROCEDURE EXPOSE appname portname opus config.
  321.     PARSE ARG handle cmdargs
  322.     batchportnr=SUBSTR(portname, POS('.',portname))
  323.     batchport='FTPBatchDownload' || batchportnr
  324.     IF config.logging=1 THEN DO
  325.         logging=config.fileprefix
  326.     END
  327.     ELSE DO
  328.         logging=''
  329.     END
  330.     IF config.requesters=1 THEN DO
  331.         requesters='REQUESTERS'
  332.     END
  333.     ELSE DO
  334.         requesters='QUIET'
  335.     END
  336.     IF ~SHOW('P',batchport) THEN DO
  337.         IF config.debugging=1 THEN DO
  338.             ADDRESS COMMAND 'RUN DOpus5:ARexx/FTPBatchDownload.dopus5' opus portname handle config.maxconnections requesters '"'logging'"' '"'config.downloadpath'"' cmdargs
  339.         END
  340.         ELSE DO
  341.             ADDRESS AREXX 'DOpus5:ARexx/FTPBatchDownload.dopus5' opus portname handle config.maxconnections requesters '"'logging'"' '"'config.downloadpath'"' cmdargs
  342.         END
  343.     END
  344.     ELSE DO
  345.         LISTER REQUEST handle appname'": Batchdownload already running!" OK'
  346.     END /* IF */
  347. RETURN 0
  348.  
  349. LoadBatchlist: PROCEDURE EXPOSE entrymenu. handle batchlistfile appname
  350.     LISTER SET handle BUSY ON
  351.     LISTER CLEAR handle
  352.  
  353.     IF OPEN('fh', batchlistfile, 'R') THEN DO
  354.         IF READLN('fh')==appname'1.0' THEN DO
  355.             DO UNTIL EOF('fh')
  356.                 entry.name=READLN('fh')
  357.                 entry.type=-1
  358.                 entry.menu=entrymenu
  359.                 IF entry.name~=='' THEN DO
  360.                     entry.comment=READLN('fh')
  361.                     LISTER ADDSTEM handle entry.
  362.                 END /* IF */
  363.             END /* DO */
  364.         END /* filecheck */
  365.         CLOSE('fh')
  366.     END /* IF OPEN */
  367.     LISTER REFRESH handle
  368.     LISTER SET handle BUSY OFF
  369. RETURN 0
  370.  
  371. SaveBatchlist: PROCEDURE EXPOSE handle batchlistfile appname
  372.     LISTER SET handle BUSY ON
  373.     IF OPEN('fh', batchlistfile, 'W') THEN DO
  374.         WRITELN('fh', appname'1.0')
  375.         LISTER QUERY handle NUMENTRIES
  376.         entries=RESULT
  377.         DO i=1 TO entries
  378.             LISTER QUERY handle ENTRY '#' || i-1 STEM entry.
  379.             WRITELN('fh', entry.name)
  380.             WRITELN('fh', entry.comment)
  381.         END /* DO */
  382.         CLOSE('fh')
  383.     END /* IF OPEN */
  384.     LISTER SET handle BUSY OFF
  385. RETURN 0
  386.  
  387. AddEntries: PROCEDURE EXPOSE entrymenu. handle sourcetitle filenames pathname
  388.     IF RIGHT(pathname,1)~=='/' & RIGHT(pathname,1)~==':' THEN pathname=pathname'/'
  389.     DO UNTIL filenames==''
  390.         PARSE VAR filenames '"' filename '"' filenames
  391.         filename=STRIP(filename)
  392.         newentry.comment=SUBSTR(sourcetitle,5) || '//' || pathname || filename
  393.  
  394.         /* handle existing entries */
  395.         number=0
  396.         DO FOREVER
  397.             IF number=0 THEN DO
  398.                 LISTER QUERY handle ENTRY filename
  399.             END
  400.             ELSE DO
  401.                 LISTER QUERY handle ENTRY filename || '.' || number
  402.             END /* IF number */
  403.             IF RC~=0 THEN LEAVE
  404.             number=number+1
  405.         END
  406.         IF number>0 THEN filename=filename || '.' || number
  407.  
  408.         newentry.name=filename
  409.         newentry.type=-1
  410.         newentry.menu=entrymenu
  411.  
  412.         LISTER ADDSTEM handle newentry.
  413.     END /* DO */
  414.     LISTER REFRESH handle
  415. RETURN 0
  416.  
  417. DeleteEntries: PROCEDURE EXPOSE handle filenames
  418.     DO UNTIL filenames==''
  419.         PARSE VAR filenames '"' filename '"' filenames
  420.         filename=STRIP(filename)
  421.         LISTER REMOVE handle '"'filename'"'
  422.     END /* DO */
  423.     LISTER REFRESH handle
  424. RETURN 0
  425.  
  426.